﻿/*
 * Crée par SharpDevelop.
 * Utilisateur: eldunkerquois
 * Date: 18/04/2011
 * Heure: 22:21
 * 
 * Pour changer ce modèle utiliser Outils | Options | Codage | Editer les en-têtes standards.
 */
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;
using System.Xml.Linq;

namespace openxml.butter.definition
{
	/// <summary>
	/// Modèle de données
	/// </summary>
	[Serializable()]
	public class DataTemplate : AbstractTemplateDefinition
	{
		
		public DataTemplate()
		{
		}
		
		public DataTemplate( String code , String description ) :base( code , description )
		{
			
		}
			
		
		
		/// <summary>
		/// Créer à partir d'un flux xml
		/// </summary>
		/// <param name="reader"></param>
		public DataTemplate( StreamReader reader )
		{
			XmlReader xmlReader = XmlReader.Create( reader );
			XElement root = XElement.Load( reader );
			this.Code = root.Name.LocalName ;
			this.Description = root.Attribute("description" ).Value;
		}
		
		
		
		
		
		
		
		
		
		#region integration
		/// <summary>
		/// Générer le xml dans un flux d'écriture
		/// </summary>
		/// <param name="stream"></param>
		public void ToStream(StreamWriter stream, List<DataItem> items)
		{
			//créer la racine
			XElement root = new XElement( this.Code , new XAttribute("desciption", this.Description ) ) ;
			
			//les fils
			foreach( DataItem item in items )
			{
				root.Add(new XElement( item.Code , new XAttribute("description" , item.Description ) , item.Value ) ) ;
				
			}
			
			//sauver dans le flux
			root.Save( stream );
			
			
		}
		
		#endregion
		
		
	}
}